
dataInitial <- data.frame(read.csv("data.csv", header = FALSE, na.strings = "?"))

names(dataInitial) <- c("symboling", "normalized_losses",
			"make", "fuel_type", "aspiration",
			"num_of_doors", "body_style",
			"drive_wheels", "engine_location",
			"wheel_base", "length",
			"width", "height",
			"curb_weight", "engine_type",
			"num_of_cylinders", "engine_size",
			"fuel_system", "bore",
			"stroke", "compression_ratio",
			"horsepower", "peak_rpm",
			"city_mpg", "highway_mpg",
			"price")

#Suppresion des 4 lignes pour lesquelles nous ne connaissons pas le prix
indiceDesValeursASupprimer <- which(is.na(dataInitial$price))
dataWithoutUnknownPrice <- dataInitial[-indiceDesValeursASupprimer,]

#Traitement des autres valeurs manquantes
#colonne 2 : normalized-losses. On remplace soit par la moyenne des voitures de meme marque, soit par la medianne s'il n'y a pas cette information
indicesDesValeursManquantesCol2 <- which(is.na(dataWithoutUnknownPrice$normalized_losses)) #is.na signifie pas de valeur
#print("indicesDesValeursManquantesCol2")
#print(indicesDesValeursManquantesCol2)
moyennesParMarque <- tapply(dataWithoutUnknownPrice$normalized_losses, dataWithoutUnknownPrice$make, mean, na.rm = TRUE)
#print("moyennesParMarque")
#print(moyennesParMarque)
medianeNormalized_losses <- median(dataWithoutUnknownPrice$normalized_losses, na.rm = TRUE)
print(moyennesParMarque)
for(indValeurManquante in indicesDesValeursManquantesCol2){
	moyenne = moyennesParMarque[dataWithoutUnknownPrice$make[indValeurManquante]]
	if(is.nan(moyenne)){
		dataWithoutUnknownPrice$normalized_losses[indValeurManquante] <- medianeNormalized_losses
	}else{
		dataWithoutUnknownPrice$normalized_losses[indValeurManquante] <- moyenne
	}
}

#Pour la colonne 6, l'unique variable qualitative avec des valeurs manquantes, on rempalce les deux modalites manquantes par la modalite la plus frequente
effectifCol6 <- table(dataWithoutUnknownPrice[,6])
print("effectifs")
print(effectifCol6)
modaliteLaPlusFrequenteCol6 <- names(effectifCol6)[which(effectifCol6 == max(effectifCol6))[1]]
print("modaliteLaPlusFrequenteCol6")
print(modaliteLaPlusFrequenteCol6)
indicesDesValeursManquantesCol6 <- which(is.na(dataWithoutUnknownPrice[,6]))
print("indicesDesValeursManquantesCol6")
print(indicesDesValeursManquantesCol6)
dataWithoutUnknownPrice[indicesDesValeursManquantesCol6, 6] = modaliteLaPlusFrequenteCol6


#Pour les colonnes 19, 20, 22 et 23 on va remplacer les valeurs manquantes par la mediane car il y a respectivement 4, 4, 2 et 2 valeurs manquantes. Cette fois on utilise cette methode car il est plus difficile d'observer des differences lie a la marque par exemple comme pour la deuxieme colonne
indicesDesValeursManquantesCol19 <- which(is.na(dataWithoutUnknownPrice[,19]))
mediane19 <- median(dataWithoutUnknownPrice[,19], na.rm = TRUE)
dataWithoutUnknownPrice[indicesDesValeursManquantesCol19, 19] = mediane19

indicesDesValeursManquantesCol20 <- which(is.na(dataWithoutUnknownPrice[,20]))
mediane20 <- median(dataWithoutUnknownPrice[,20], na.rm = TRUE)
dataWithoutUnknownPrice[indicesDesValeursManquantesCol20, 20] = mediane20

indicesDesValeursManquantesCol22 <- which(is.na(dataWithoutUnknownPrice[,22]))
mediane22 <- median(dataWithoutUnknownPrice[,22], na.rm = TRUE)
dataWithoutUnknownPrice[indicesDesValeursManquantesCol22, 22] = mediane22

indicesDesValeursManquantesCol23 <- which(is.na(dataWithoutUnknownPrice[,23]))
mediane23 <- median(dataWithoutUnknownPrice[,23], na.rm = TRUE)
dataWithoutUnknownPrice[indicesDesValeursManquantesCol23, 23] = mediane23
#edit(dataWithoutUnknownPrice[,c(6,18:26)])


#Creation des variables indicatrice (ou discretisation des variables qualitatives)
createIndicatrices <- function(variableQuantitative){
	resultat <- matrix(data = 0, nrow = length(variableQuantitative), ncol = length(unique(variableQuantitative)))
	resultat <- data.frame(resultat)
	names(resultat) = unique(variableQuantitative)
	#row.names(resultat) = 1:length(variableQuantitative)
	for(i in 1:length(variableQuantitative)){
		modalite <- as.character(variableQuantitative[i])
		#print(paste("i : ", i, "modalite :", modalite))
		resultat[i, modalite] <- 1
	}
	return(resultat)
}

indiceVariableNumeric <- c(1, 2, 10:14, 17, 19:26) ###TODO on s'arrete la il faut discretesise les variables

dataDiscretise <- dataWithoutUnknownPrice[,indiceVariableNumeric[1]]
colNames <- names(dataWithoutUnknownPrice)[indiceVariableNumeric[1]]

for(i in 2:ncol(dataWithoutUnknownPrice)){
	if (i %in% indiceVariableNumeric){
		#print("numeric")
		dataDiscretise = cbind(dataDiscretise, dataWithoutUnknownPrice[,i])
		colNames <- c(colNames, names(dataWithoutUnknownPrice)[i])
	}else{
		#print("non numeric")
		colNames <- c(colNames, as.character(unique(dataWithoutUnknownPrice[,i])))
		dataDiscretise = cbind(dataDiscretise, createIndicatrices(dataWithoutUnknownPrice[,i]))
	}
}
#print(ncol(dataDiscretise))
names(dataDiscretise) = colNames
print(dataDiscretise[1:10,])


#Enregistrement dans un tableau les donnees quantitatives
indiceVariableIndicatrice <- which(mapply(length, mapply(function(x) unique(as.character(x)), dataDiscretise)) == 2)
#indiceVariableQuantitative <- 1:ncol(dataDiscretise)[-indiceVariableIndicatrice]
indiceVariableQuantitative <- which(!1:ncol(dataDiscretise) %in% indiceVariableIndicatrice)
dataQuantitative <- dataDiscretise[,-indiceVariableIndicatrice]
dataIndicatrice <- dataDiscretise[,c(indiceVariableIndicatrice, ncol(dataDiscretise))]
dataQualitativeInitial <- dataWithoutUnknownPrice[, -indiceVariableNumeric]


#source("outliers.R")
